package com.gitee.zhuhjay.xunfei.sdk.model;

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.io.Serializable;
import java.util.List;
import java.util.Map;

/**
 * 模型 function 方法注册信息
 *
 * @author ZhuHJay
 * @since 2023/11/17 11:20
 */
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class Function implements Serializable {

    /**
     * function 名称, 输入命中后会返回
     */
    private String name;
    /**
     * function 描述, 描述越详细越有助于大模型理解
     */
    private String description;
    /**
     * function 参数列表
     */
    private Param parameters;

    @Data
    @Builder
    @NoArgsConstructor
    @AllArgsConstructor
    public static class Param implements Serializable {
        /**
         * 参数类型
         */
        private String type;
        /**
         * 参数描述: 命中该方法时需要返回哪些参数(用户定义)
         */
        private Map<String, Item> properties;
        /**
         * 必须返回的参数列表: 命中该方法时必须返回的字段(用户定义)
         */
        private List<String> required;
    }

    @Data
    @Builder
    @NoArgsConstructor
    @AllArgsConstructor
    public static class Item implements Serializable {
        /**
         * 参数类型描述: 需要返回的参数类型(用户定义)
         */
        private String type;
        /**
         * 参数详细: 需要返回的参数的具体描述(用户定义)
         */
        private String description;
    }

}
